package com.liu.common.controller;

import com.liu.common.bean.ResultBean;
import com.liu.common.exception.ValidateException;
import com.liu.common.utils.ResultStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BaseController {

    /**
     * 成功返回结果
     * @param msg 返回消息
     * @return
     */
    protected ResultBean success(String msg){
        return result(ResultStatus.SUCCESS,msg,null);
    }
    /**
     * 成功返回结果
     * @param msg 返回消息
     * @Param data 返回数据
     * @return
     */
    protected ResultBean success(String msg,Object data){
        return result(ResultStatus.SUCCESS,msg,data);
    }

    /**
     * 失败返回结果
     * @param msg 错误消息
     * @return
     */
    protected ResultBean fail(String msg){
        return result(ResultStatus.FAIL,msg,null);
    }

    /**
     * 失败返回结果
     * @param msg 错误信息
     * @param data 错误数据
     * @return
     */
    protected ResultBean fail(String msg,Object data){
        return result(ResultStatus.FAIL,msg,data);
    }


    /**
     * 后端校验
     * @param result
     */
    protected void validate(BindingResult result){
        //获取错误字段信息
        List<FieldError> list = result.getFieldErrors();
        if (null != list && list.size()>0){
            Map error = new HashMap<>();
            list.forEach(f->{
                error.put(f.getField(),f.getDefaultMessage());
            });
            throw new ValidateException(error);
        }
    }



    ResultBean result(ResultStatus status,String msg,Object data){
        return new ResultBean(status.getCode(), msg, data);
    }
}
